package pedido;

import item.Item;

import java.util.ArrayList;
import java.util.Iterator;

import produto.Produto;
import cliente.Cliente;
import exception.PedidoInexistenteException;


public class Pedido {
	
	private Integer id;
	
	private Cliente cliente;
	
	private Integer numeroQuantidadePedida;
	
	private Integer valorDoPedido;
	
	private ArrayList<Item> item;
	
	private ArrayList<Produto> produto;

	
	public Pedido(Cliente cliente, Integer id, Integer numeroQuantidadePedida) {
		this.cliente = cliente;
		this.id = id;
		this.numeroQuantidadePedida = numeroQuantidadePedida;
		this.produto = new ArrayList<Produto>();
		this.item = new ArrayList<Item>();
	}

	public Pedido(){
		
	}
	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}
	
	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public Integer getNumeroQuantidadePedida() {
		return numeroQuantidadePedida;
	}

	public void setNumeroQuantidadePedida(Integer numeroQuantidadePedida) {
		this.numeroQuantidadePedida = numeroQuantidadePedida;
	}

	public ArrayList<Item> getItem() {
		return item;
	}

	public void setItem(ArrayList<Item> item) {
		this.item = item;
	}

	public ArrayList<Produto> getProduto() {
		return produto;
	}

	public void setProduto(ArrayList<Produto> produto) {
		this.produto = produto;
	}

	
	public Integer getValorDoPedido() {
		return valorDoPedido;
	}

	public void setValorDoPedido(Integer valorDoPedido) {
		this.valorDoPedido = valorDoPedido;
	}
	
	/*Metodo que adiciona item ao Pedido, caso um produto ja tenha sido pedido, mas
	 * o usuario resolveu aumentar a quantidade de produtos ele adiciona somente a
	 * quantidade do produto e nao um produto repetido. Remove a quantidade de produto
	 * pedido do estoque.
	 */
	public void adicionarPedido(Item item)  {
		
		Iterator<Item> iterator = this.item.iterator();
		
		for (Item i : this.item) {
			if ( item.getId() == i.getId() ) {
				i.setQuantidadeProdutosPedidos(i.getQuantidadeProdutosPedidos()
						+ item.getQuantidadeProdutosPedidos());
				
				Integer estoque = item.getProduto().getQuantidade() - item.getQuantidadeProdutosPedidos();	
				item.getProduto().setQuantidade(estoque);
				
				return;
			}
		}
		this.item.add(item);
		
		Integer estoque = item.getProduto().getQuantidade() - item.getQuantidadeProdutosPedidos();	
		item.getProduto().setQuantidade(estoque);
		
		System.out.println("item adicionado!!");
	}
	
	//Remover Item
public void removerPedido(Item item)  {
		
		Iterator<Item> iterator = this.item.iterator();
		
		for (Item i : this.item) {
			if ( item.getId() == i.getId() ) {
				i.setQuantidadeProdutosPedidos(i.getQuantidadeProdutosPedidos()
						- item.getQuantidadeProdutosPedidos());
				
				Integer estoque = item.getProduto().getQuantidade() - item.getQuantidadeProdutosPedidos();	
				item.getProduto().setQuantidade(estoque);
				
				return;
			}
		}
		this.item.remove(item);
		
		Integer estoque = item.getProduto().getQuantidade() - item.getQuantidadeProdutosPedidos();	
		item.getProduto().setQuantidade(estoque);
	}
	
	public void calcularPedido(Pedido pedido) throws PedidoInexistenteException {
        
        ArrayList<Item> arrayItem = pedido.getItem();
         
         Integer valorPorItem = 0;
         Integer aux = 0;
         Integer soma = 0;
       
          for(int i=0; i<arrayItem.size(); i++ ){
              
              Item item = (Item)arrayItem.get(i);
              
              if ( item.getProduto()!= null ) {
               Integer precoProduto = new Integer (item.getProduto().getPreco());
               Integer quantidadeDeItensPedidos = new Integer (item.getQuantidadeProdutosPedidos());
              
               valorPorItem = precoProduto * quantidadeDeItensPedidos;
                  
                  
                  soma = aux + valorPorItem;
                  aux = aux + valorPorItem;
             
              } 
                 
          }
          pedido.setValorDoPedido(soma);
          System.out.println("valor dos pedidos"+soma);
       
       }
}